package LogicaClasesNew;

import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.MappedSuperclass;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)
@MappedSuperclass //Nunca se va a instanciar
@Table(name = "usuarios", uniqueConstraints = @UniqueConstraint(columnNames = "EMAIL"))//Para que email sea unique
public abstract class Usuario {
    
    @XmlElement
    @Id
    private String Nickname;
    
    @XmlElement
    private String Nombre;
    
    @XmlElement
    private String Apellido;
    
    @XmlElement
    private String FechNacim;
    
    @XmlElement
    private String password;
    
    @Column(unique = true, nullable = false)//para que email no se repita
    @XmlElement
    private String Mail;
    
    //para la imagen
    @XmlElement
    @Lob
    private byte[] foto;

    //Contructor por defecto
    public Usuario() {
    }

    //Contructor sin subir imagen

    public Usuario(String Nickname, String Nombre, String Apellido, String FechNacim, String password, String Mail) {
        this.Nickname = Nickname;
        this.Nombre = Nombre;
        this.Apellido = Apellido;
        this.FechNacim = FechNacim;
        this.password = password;
        this.Mail = Mail;
    }

    //Contructor completo

    public Usuario(String Nickname, String Nombre, String Apellido, String FechNacim, String password, String Mail, byte[] Foto) {
        this.Nickname = Nickname;
        this.Nombre = Nombre;
        this.Apellido = Apellido;
        this.FechNacim = FechNacim;
        this.password = password;
        this.Mail = Mail;
        this.foto = Foto;

    }

    public byte[] getFoto() {
        return foto;
    }

    public void setFoto(byte[] foto) {
        this.foto = foto;
    }
    
    

    public void setApellido(String Apellido) {
        this.Apellido = Apellido;
    }

    public void setFechNacim(String FechNacim) {
        this.FechNacim = FechNacim;
    }

    public void setMail(String Mail) {
        this.Mail = Mail;
    }

    public void setNombre(String Nombre) {
        this.Nombre = Nombre;
    }

    public String getApellido() {
        return Apellido;
    }

    public String getNombre() {
        return Nombre;
    }

    public String getFechNacim() {
        return FechNacim;
    }

    public String getMail() {
        return Mail;
    }

    public String getNickname() {
        return Nickname;
    }

    public void setNickname(String Nickname) {
        this.Nickname = Nickname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 17 * hash + Objects.hashCode(this.Nickname);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if (!Objects.equals(this.Nickname, other.Nickname)) {
            return false;
        }
        return true;
    }

}
